from docx import Document
from docx.enum.style import WD_STYLE_TYPE
from docx.shared import Pt

def process_docx(input_path, output_path):
    """
    处理Word文档：
    1. 在【】标记前插入新行（含原标记内容）
    2. 将原【】改为二级标题
    3. 在二级标题后插入复制的一级标题
    4. 所有一级标题转为正文格式
    """
    doc = Document(input_path)
    new_paragraphs = []  # 存储新文档结构
  
    # 遍历所有段落并处理
    for para in doc.paragraphs:
        text = para.text
      
        # 处理包含【】的段落
        if '【' in text and '】' in text:
            parts = []
            last_index = 0
          
            # 拆分段落中的【】标记
            while '【' in text[last_index:]:
                start = text.index('【', last_index)
                end = text.index('】', start) + 1
                mark = text[start:end]
              
                # 添加标记前的内容
                if last_index < start:
                    parts.append({
                        'text': text[last_index:start],
                        'style': para.style.name
                    })
              
                # 添加新行：原始标记（普通文本）
                parts.append({
                    'text': mark,
                    'style': 'Normal'
                })
              
                # 添加二级标题：标记内容
                parts.append({
                    'text': mark,
                    'style': 'Heading 2'
                })
              
                last_index = end
          
            # 添加标记后的剩余内容
            if last_index < len(text):
                parts.append({
                    'text': text[last_index:],
                    'style': para.style.name
                })
          
            new_paragraphs.extend(parts)
        else:
            # 无【】的直接保留
            new_paragraphs.append({
                'text': text,
                'style': para.style.name
            })
  
    # 重建文档并插入一级标题副本
    new_doc = Document()
    current_heading1 = None
  
    for item in new_paragraphs:
        p = new_doc.add_paragraph(item['text'], style=item['style'])
      
        # 记录当前一级标题
        if item['style'] == 'Heading 1':
            current_heading1 = item['text']
      
        # 在二级标题后插入一级标题副本
        if item['style'] == 'Heading 2' and current_heading1:
            new_doc.add_paragraph(current_heading1, style='Heading 1')
  
    # 将所有一级标题转为正文
    for para in new_doc.paragraphs:
        if para.style.name == 'Heading 1':
            para.style = new_doc.styles['Normal']
  
    new_doc.save(output_path)
# 使用示例
if __name__ == "__main__":
    input_file = r"C:\Users\UESTC\OneDrive - mail2.sysu.edu.cn\挤压\引言-2.docx"   # 输入文件名
    output_file = r"C:\Users\UESTC\OneDrive - mail2.sysu.edu.cn\挤压\引言-2-1.docx" # 输出文件名
    process_docx(input_file, output_file)
    print(f"文档处理完成！已保存为: {output_file}")